New Relic OneでAuth0テナントからのデータを可視化するダッシュボードを作り終わった
以前、Auth0のログをAmazon EventBrigde経由でNew Relicに送信するというブログを書きました。
上記ブログではログインに成功したログのみをNew Relicに送信していましたが、今回は全てのイベントを送信し、グラフなどで可視化するダッシュボードを作ることにチャレンジしてみます。
現在Auth0ではDatadogとSplunkで脅威検出の視覚化と監視ができるインテグレーションを提供しているようです。
Datadogと同じようなダッシュボードを作っていきます。
やってみる
前提
- Auth0のStreamsの設定済み
- AWS EventBrigdeの設定済み
前述のブログの環境を少し変更します。
AWS EventBrigdeでイベントパターンを修正
全てのイベントを対象にします。
Auth0ダッシュボードのEventBrigde設定のEvent Source Nameをコピーして、イベントパターンのsourceに指定します。 これで全てのAuth0イベントがEventBrigde経由でNew Relic Logsに流れます。
{ "source": [ "aws.partner/auth0.com/****" ] }
New Relicでダッシュボードを作成する
New Relic(one.newrelic.com)にログインし、Dashboards
ページのCreate a Dashboar
をクリックして作成します。
任意の名前を入力して作成すると、上記の様に空っぽのダッシュボードが作成されます。
New Relicでダッシュボードにグラフを追加
New Relic Logsをクエリしてグラフを作っていきます。
Add a new chart
, Add a chart
をクリックします。
Data type
をEvents
にし、View a chart widh
でどこからデータを取得するか決定していきます。
もしくは、NRQL
というクエリ言語を用いて作成することも可能です。
今回はこれを使っていきます。
ログイン成功
テナントの成功したログインイベントの数を表示します。
グラフの名前、Chart Type
をLineにし、
NRQLクエリを以下のように記述し、Run
ボタンを押すとグラフが表示されます。
SELECT count(data.type) FROM Log FACET `data.type` WHERE data.type in ('s','scoa','sens') LIMIT 10 SINCE 3600 seconds ago TIMESERIES 5 minute
data.typeというプロパティにイベントタイプの種類が格納されているので、ログイン成功時のタイプに絞って件数を取得します。
Auth0のドキュメントのログイベントタイプコードから、ログイン成功イベントのタイプを探します。
このグラフでは、
- s: ログイン成功
- scoa: クロスオリジン認証の成功
- sens: ネイティブソーシャルログインの成功
に絞っています。
Save
ボタンを押すとダッシュボードに追加されます。
他のイベントを視覚化する場合、同じことを繰り返していきます。
ログイン失敗
テナントの失敗したログインイベントの数を表示します。ログイン失敗の急増は、異常なトラフィックのシグナルである可能性があります。
NRQL
SELECT count(data.type) FROM Log FACET `data.type` WHERE data.type in ('fu','fp') LIMIT 10 SINCE 3600 seconds ago TIMESERIES 5 minute
IPアドレスによるログインの失敗
地理位置情報ごとのテナントの失敗したログインイベントの数を表示します。特定の地域での予期しないトラフィックの急増は、異常なトラフィックのシグナルである可能性があります。
NRQL
SELECT count(data.type) FROM Log FACET data.ip WHERE data.type in ('fu','fp') LIMIT 10 SINCE 3600 seconds ago TIMESERIES 5 minute
トラフィックを送信する一意のIPの数
トラフィックを送信するIPの数は、地理位置情報によって予測可能なトラフィックパターンに従う必要があります。スパイクは、プロモーションキャンペーンによる追加のトラフィックを表す可能性がありますが、スパイクは異常なトラフィックの兆候である可能性もあります。
NRQL
SELECT count(data.ip) FROM Log FACET data.ip WHERE data.type in ('s' , 'scoa' , 'sens' , 'fp' , 'fu') LIMIT 10 SINCE 3600 seconds ago TIMESERIES 5 minute
障害のある上位5つのIP
単一のIPからの多数の障害は、ログインフローの異常なトラフィックを示す可能性があります。
NRQL
SELECT count(data.ip) FROM Log FACET data.ip WHERE data.type in ('fp' , 'fu') LIMIT 5 SINCE 3600 seconds ago
アカウント作成イベント
テナントの作成されたアカウント作成イベントの数を表示します。
NRQL
SELECT count(data.ip) FROM Log FACET data.type WHERE data.type in ('ss','fs') SINCE 3600 seconds ago TIMESERIES 1 minute
ユーザーエージェント別のアカウント作成イベント
特定のユーザーエージェント(safari,chorome,firefox,botなど)からのトラフィックの急増は、異常なトラフィックの診断に役立ちます。
NRQL
SELECT count(data.user_agent) FROM Log FACET data.user_agent WHERE data.type in ('ss','fs') LIMIT 10 SINCE 3600 seconds ago TIMESERIES 1 minute
アカウントが作成されたIP
単一のIPから作成された多数のアカウントは、ログインフローへの攻撃を示す可能性があります。
NRQL
SELECT count(data.ip) FROM Log FACET data.ip WHERE data.type in ('ss') LIMIT 10 SINCE 3600 seconds ago TIMESERIES 1 minute
異常検出イベント
Auth0の異常検出機能によってトリガーされるイベント
- limit_wc: ブロックされたIPアドレス(単一のアカウントが失敗)
- limit_mu: ブロックされたIPアドレス(複数のアカウントが失敗)
- pwd_leak: パスワード違反が検出
NRQL
SELECT count(data.ip) FROM Log FACET data.type WHERE data.type in ('limit_wc','limit_mu','pwd_leak') LIMIT 10 SINCE 3600 seconds ago TIMESERIES 1 minute
異常検出イベントを伴うIP
最も異常なトラフィックをトリガーするIPアドレス。限られた数のIPからの異常検出イベントの急増は、攻撃の兆候となる可能性があります。
NRQL
SELECT count(data.ip) FROM Log FACET data.type WHERE data.type in ('limit_wc','limit_mu','pwd_leak') LIMIT 10 SINCE 3600 seconds ago TIMESERIES 1 minute
サンプルダッシュボードの確認
ダッシュボードをPDFでエクスポートしたものを以下のURLで確認できます。
https://gorgon.nr-assets.net/image/4f8a86f3-a689-40cc-ac8c-06a150fb7ad6?format=pdf
今回できなかったこと
Datadogでは地理位置情報(国、地域など)でデータをグラフ化できていましたが、New Relicでそのような情報を出す方法がわからなかったのでIPアドレス別で出しました。
最後に
Auth0のログをNew Relic Logsに送信し、そのデータを元に可視化してみました。 Auth0とNew Relicを使っているかたはクエリを変更するなどを試し、データの可視化を行ってみてください。
Auth0公式で対応してくれたらいいのにというのは内緒です。